﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int main()
//{
//	char p = 'w';
//	char* pa = &p;
//	*pa = 'w';
//	return 0;
//
// }

//int main()
//{
//	const char* pa = "hello";
//	printf("%s\n", pa);
//	return 0;
//}


//int add(int a, int b)
//{
//	return a + b;
//}
//int sub(int a, int b)
//{
//	return a - b;
//}
//int mul(int a, int b)
//{
//	return a * b;
//}
//int div(int a, int b)
//{
//	return a / b;
//}
//
//void calc(int(*pa)(int, int))
//{
//	int x = 0;
//	int y = 0;
//	int ret = 0;
//	printf("请输入");
//	scanf("%d %d", &x, &y);
//	ret = pa(x, y);
//	printf("%d\n", ret);
//}
//void menu()
//{
//	printf("****************************\n");
//	printf("********1.add   2.sub*******\n");
//	printf("********3.mut   4.div*******\n");
//	printf("*********   0.exit   *******\n");
//	printf("****************************\n");
//}
//int main()
//{
//	int input = 0;
//	do
//	{
//		menu();
//		printf("请选择");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			calc(add);
//			break;
//		case 2:
//			calc(sub);
//			break;
//		case 3:
//			calc(mul);
//			break;
//		case 4:
//			calc(div);
//			break;
//		case 0:
//			printf("退出程序");
//		default:
//			printf("程序错误，请重新选择");
//			break;
//
//		}
//
//	} while (input);
//	return 0;
//}
//
//
//
// int add(int a, int b)
//{
//	return a + b;
//}
//int sub(int a, int b)
//{
//	return a - b;
//}
//int mul(int a, int b)
//{
//	return a * b;
//}
//int div(int a, int b)
//{
//	return a / b;
//}
//
//void menu()
//{
//	printf("******************************\n");
//	printf("********1.add      2.sub******\n");
//	printf("********3.mut      4.div******\n");
//	printf("********     0.exit     ******\n");
//	printf("******************************\n");
//	printf("******************************\n");
//}
//
//int main()
//{
//	int input = 0;
//	int x = 0;
//	int y = 0;
//	int ret = 0;
//	do 
//	{
//		menu();
//		printf("请选择");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			printf("请输入操作数");
//			scanf("%d %d", &x, &y);
//			ret =add(x, y);
//			printf("%d\n", ret);
//			break;
//		case 2:
//			printf("请输入操作数");
//			scanf("%d %d", &x, &y);
//			ret = sub(x, y);
//			printf("%d\n", ret);
//			break;
//		case 3:
//			printf("请输入操作数");
//			scanf("%d %d", &x, &y);
//			ret = mul(x, y);
//			printf("%d\n", ret);
//			break;
//		case 4:
//			printf("请输入操作数");
//			scanf("%d %d", &x, &y);
//			ret = div(x, y);
//			printf("%d\n", ret);
//			break;
//		case 0:
//			printf("退出程序\n");
//			break;
//		default:
//			printf("选择错误\n");
//			break;
//
//		}
//	} while (input);
//
//	return 0;
//}


//int int_cmp(const void* p1, const void* p2)
//{
//    return (*(int*)p1 - *(int*)p2);
//}
//int main()
//{
//    int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
//    int i = 0;
//
//    qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);
//    for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
//    {
//            printf("%d ", arr[i]);
//    }
//    printf("\n");
//    return 0;
//}


//struct Stu //学⽣
//{
//    char name[20];//名字
//    int age;//年龄
//};
//
//
////假设按照年龄来⽐较
//
//int cmp_stu_by_age(const void* e1, const void* e2)
//{
//    return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
//}
////strcmp - 是库函数，是专⻔⽤来⽐较两个字符串的⼤⼩的
////假设按照名字来⽐较
//
//int cmp_stu_by_name(const void* e1, const void* e2)
//{
//    return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
//}
////按照年龄来排序
//
//
//
//void test2()
//{
//     struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };
//     int sz = sizeof(s) / sizeof(s[0]);
//     qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
// }
// void test3()
// {
//      struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };
//      int sz = sizeof(s) / sizeof(s[0]);
//      qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
//  }
//
//int main()
//{
//    test2();
//    test3();
//    return 0;
//}


int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));//16个字节
printf("%d\n", sizeof(a + 0));//a是首元素,+0还是首元素4/8个字节。
printf("%d\n", sizeof(*a));//a是首元素的地址，*a是首元素4/8个字节
printf("%d\n", sizeof(a + 1));//a是首元素的地址，跳过一个整形。第二个元素4/8个字节
printf("%d\n", sizeof(a[1]));//a[1]是第二个元素，大小是4个字节
printf("%d\n", sizeof(&a));//&a是数组的地址，数组的地址也是地址，是地址大小就是4/8个字节
printf("%d\n", sizeof(*&a));//*&相互抵消了。
printf("%d\n", sizeof(&a + 1)); //&a + 1是跳过整个数组后的那个位置的地址，是地址就是4 / 8个字节
printf("%d\n", sizeof(&a[0]));//首元素的地址，大小4/8个字节
printf("%d\n", sizeof(&a[0] + 1));//数组第二个元素的地址，4/8个字节。